package com.lyq.view;


import com.lyq.bean.Admin;
import com.lyq.dao.AdminDao;
import com.lyq.utils.Tools;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URL;

/**
 * 登录界面类
 * 负责创建和展示学生信息管理系统的登录窗口
 */
public class LoginView {

    // 窗口对象
    private final JFrame frame;

    // 窗口宽度
    private final int WIDTH = 800;

    // 窗口高度
    private final int HEIGHT = 500;


    /**
     * 构造方法
     * 初始化登录窗口的基本属性和设置
     */
    public LoginView() {
        // 创建frame实例（主窗口容器）
        frame = new JFrame();

        // 初始化界面组件
        initView();

        // 窗口标题
        frame.setTitle("学生信息管理系统");

        // 窗口布局
        frame.setLayout(null);

        // 窗口不能调整大小
        frame.setResizable(false);

        // 窗口位置
        Tools.setPos(frame,WIDTH,HEIGHT);

        // 窗口可见
        frame.setVisible(true);

        // 设置关闭窗口时退出程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 窗口icon图标
        try {

            // 通过类加载器获取图片资源
            URL imageUrl = getClass().getResource("/image/logo.png");
            if (imageUrl != null) {

                // 使用ImageIO读取图片并转换为Image对象
                Image logo = ImageIO.read(imageUrl);

                // 设置图标
                frame.setIconImage(logo);
            } else {
                System.out.println("LOGO图标不存在");
            }
        } catch (IOException e) {
            System.out.println("LOGO图标加载失败");
        }

        // 验证窗口中的组件布局
        frame.validate();
    }

    /**
     * 初始化界面组件
     */
    private void initView() {
        // 主面板，作为所有组件的容器
        JPanel jPanel = new JPanel();

        // 铺满整个窗口
        jPanel.setBounds(0, 0, WIDTH, HEIGHT);

        // 浅灰色背景
        jPanel.setBackground(Color.decode("#f8f8f8"));

        // 使用绝对布局
        jPanel.setLayout(null);

        // 将面板添加到窗口
        frame.add(jPanel);

        // 标题标签
        JLabel title = new JLabel("学生管理系统");
        title.setBounds(0, 0, WIDTH, 100);
        title.setFont(new Font("宋体", Font.BOLD, 22));
        title.setHorizontalAlignment(SwingConstants.CENTER);
        jPanel.add(title);

        // 账号面板
        JPanel accountPanel = new JPanel();
        accountPanel.setBounds(0, 180, WIDTH, 30);
        accountPanel.setBackground(Color.decode("#f8f8f8"));
        accountPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
        jPanel.add(accountPanel);


        // 账号label标签
        JLabel accountLabel = new JLabel("账号：");
        accountLabel.setBounds(0, 0, WIDTH, 30);
        accountLabel.setFont(new Font("宋体", Font.BOLD,18));
        accountLabel.setLayout(null);
        accountPanel.add(accountLabel);

        // 账号输入框
        JTextField accountField = new JTextField(15);
        accountField.setFont(new Font("宋体", Font.BOLD,18));
        accountPanel.add(accountField);

        // 密码面板
        JPanel passwordPanel = new JPanel();
        passwordPanel.setBounds(0, 220, WIDTH, 30);
        passwordPanel.setBackground(Color.decode("#f8f8f8"));
        passwordPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
        jPanel.add(passwordPanel);

        // 密码label标签
        JLabel passwordLabel = new JLabel("密码：");
        passwordLabel.setBounds(0, 0, WIDTH, 30);
        passwordLabel.setFont(new Font("宋体", Font.BOLD,18));
        passwordLabel.setLayout(null);
        passwordPanel.add(passwordLabel);

        // 密码输入框
        JPasswordField passwordField = new JPasswordField(15);
        passwordField.setFont(new Font("宋体", Font.BOLD,18));
        passwordPanel.add(passwordField);

        // 按钮面板
        JPanel buttonPanel = new JPanel();
        buttonPanel.setBounds(0, 270, WIDTH, 40);
        buttonPanel.setBackground(Color.decode("#f8f8f8"));
        buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER));

        // 将按钮面板添加到主面板
        jPanel.add(buttonPanel);

        // 登录按钮
        JButton loginButton = new JButton("登录");
        loginButton.setFont(new Font("宋体", Font.BOLD,18));
        loginButton.setPreferredSize(new Dimension(220, 30));
        loginButton.setBackground(Color.decode("#008DEB"));
        loginButton.setForeground(Color.white);
        buttonPanel.add(loginButton);

        // 登录按钮监听
        loginButton.addActionListener(new ActionListener() {
            /**
             * 登录
             * @param e the event to be processed
             */
            @Override
            public void actionPerformed(ActionEvent e) {

                // 账号
                String account = accountField.getText();

                // 密码
                String password = new String(passwordField.getPassword());

                // 验证账号和密码
                if (account.isEmpty()) {
                    Tools.showMessage("账号不能为空！");
                } else if (password.isEmpty()) {
                    Tools.showMessage("密码不能为空！");
                }else {

                    // 进行登录
                   Admin admin = AdminDao.Login(account,password);
                   if (admin == null) {
                       Tools.showMessage("账号或密码错误！");
                   }else {
                       // 保存当前登录用户
                       Admin.currentLoginAdmin = admin;
                       frame.dispose();
                       new ManageView();
                   }
                }
            }
        });
    }
}
